﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

using MySql.Data.MySqlClient;

namespace MakeIT.MiraPark.Negocios
{
    public static partial class ModelBO
    {

        public static void getPerfilXObjetos(PerfilVO perfilVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT IdPerfil, IdObjeto, Visivel, Habilitado ");
            query.AppendLine("FROM perfilxobjeto ");
            query.AppendLine("WHERE IdPerfil = ?IdPerfil ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdPerfil", perfilVO.idPerfil);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                perfilVO.perfilXObjetoVOs.Clear();

                while (reader.Read())
                {
                    PerfilxObjetoVO perfilxObjetoVO = PerfilxObjetoVO.CreatePerfilxObjetoVO();
                    perfilxObjetoVO.idPerfil = reader.GetInt32("IdPerfil");
                    perfilxObjetoVO.idObjeto = reader.GetInt32("IdObjeto");
                    perfilxObjetoVO.visivel = reader.GetBoolean("Visivel");
                    perfilxObjetoVO.habilitado = reader.GetBoolean("Habilitado");

                    perfilVO.perfilXObjetoVOs.Add(perfilxObjetoVO);
                }
                reader.Close();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }
        }
        public static void getPerfilXObjetos(ObjetoVO objetoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT IdPerfil, IdObjeto, Visivel, Habilitado ");
            query.AppendLine("FROM perfilxobjeto ");
            query.AppendLine("WHERE IdObjeto = ?IdObjeto ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdObjeto", objetoVO.idObjeto);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                objetoVO.perfilxObjetoVOs.Clear();

                while (reader.Read())
                {
                    PerfilxObjetoVO perfilxObjetoVO = PerfilxObjetoVO.CreatePerfilxObjetoVO();
                    perfilxObjetoVO.idPerfil = reader.GetInt32("IdPerfil");
                    perfilxObjetoVO.idObjeto = reader.GetInt32("IdObjeto");
                    perfilxObjetoVO.visivel = reader.GetBoolean("Visivel");
                    perfilxObjetoVO.habilitado = reader.GetBoolean("Habilitado");

                    objetoVO.perfilxObjetoVOs.Add(perfilxObjetoVO);
                }
                reader.Close();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setPerfilXObjetos(List<PerfilxObjetoVO> perfilxObjetoVOs)
        {
            foreach (PerfilxObjetoVO perfilxObjetoVO in perfilxObjetoVOs)
            {
                setPerfilXObjeto(perfilxObjetoVO);
            }
        }

        public static void setPerfilXObjeto(PerfilxObjetoVO perfilxObjetoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE perfilxobjeto ");
            query.AppendLine("SET Visivel=?Visivel, Habilitado=?Habilitado ");
            query.AppendLine("WHERE IdPerfil=?IdPerfil and IdObjeto=?IdObjeto ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdPerfil", perfilxObjetoVO.idPerfil);
            cmd.Parameters.AddWithValue("?IdObjeto", perfilxObjetoVO.idObjeto);
            cmd.Parameters.AddWithValue("?Visivel", perfilxObjetoVO.visivel);
            cmd.Parameters.AddWithValue("?Habilitado", perfilxObjetoVO.habilitado);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void newPerfilXObjetos(List<PerfilxObjetoVO> perfilxObjetoVOs)
        {
            foreach (PerfilxObjetoVO perfilxObjetoVO in perfilxObjetoVOs)
            {
                newPerfilXObjeto(perfilxObjetoVO);
            }
        }

        public static long newPerfilXObjeto(PerfilxObjetoVO perfilxObjetoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO perfilxobjeto ");
            query.AppendLine("SET IdPerfil=?IdPerfil, IdObjeto=?IdObjeto, Visivel=?Visivel, Habilitado=?Habilitado ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdPerfil", perfilxObjetoVO.idPerfil);
            cmd.Parameters.AddWithValue("?IdObjeto", perfilxObjetoVO.idObjeto);
            cmd.Parameters.AddWithValue("?Visivel", perfilxObjetoVO.visivel);
            cmd.Parameters.AddWithValue("?Habilitado", perfilxObjetoVO.habilitado);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delPerfilXObjetos(List<PerfilxObjetoVO> perfilxObjetoVOs)
        {
            foreach (PerfilxObjetoVO perfilxObjetoVO in perfilxObjetoVOs)
            {
                delPerfilXObjeto(perfilxObjetoVO);
            }
        }
        public static void delPerfilXObjeto(PerfilxObjetoVO perfilxObjetoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM perfilxobjeto ");
            query.AppendLine("WHERE IdPerfil=?IdPerfil and IdObjeto=?IdObjeto ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdPerfil", perfilxObjetoVO.idPerfil);
            cmd.Parameters.AddWithValue("?IdObjeto", perfilxObjetoVO.idObjeto);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }
    }
}
